dynamic behavior Java